package rdatabase

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"log"
)

type InitMySQL struct {
	User     string `json:"user"`
	Password string `json:"Password"`
	Host     string `json:"host"`
	Port     uint   `json:"port"` //3306
	Database string `json:"database"`
}

// Connect 连接到MySQL数据库
// logMod：gorm的日志打印等级
// closeAffair：是否关闭事务功能，不使用事务的情况下，关闭它会有更好的性能。
func (p *InitMySQL) Connect(logMod logger.LogLevel, closeAffair bool) *gorm.DB {
	_dsn := fmt.Sprintf(
		"%v:%v@tcp(%v:%v)/%v?charset=utf8mb4&parseTime=True&loc=Local",
		p.User, p.Password, p.Host, p.Port, p.Database)

	_client, err := gorm.Open(mysql.Open(_dsn), &gorm.Config{
		Logger:                 logger.Default.LogMode(logMod),
		SkipDefaultTransaction: closeAffair,
	})
	if err != nil {
		log.Fatal("连接 MySQL 数据库", p.Database, "失败：", err)
	}
	log.Println("连接 MySQL 数据库", p.Database, "完成")
	return _client
}
